How to communicate errors 如何傳達錯誤資訊

為什麼現在很多軟體的錯誤提示根本沒考慮使用者體驗。

因為程式設計師會經常對設計師說:“還有這個情況,也得加個錯誤提示”這樣會導致錯誤提示都是程式設計師說的,但程式設計師並不是使用者。所以即使大廠的產品錯誤資訊使用者體驗也不好。

為什麼程式設計師和使用者差別很大

剛寫東西停頓一下,就跳出"需要空格"的報錯,甚至下一行也莫名報錯。程式設計師已習慣忽略紅色、黃色的各種提示,對硬體或第三方庫的錯誤也不在意。

總之,程式設計師對錯誤提示司空見慣

而使用者則對最小的錯誤也會感到緊張。錯誤多的時候使用者就擺爛了

Yahoo 的表單互動設計做得很糟糕

缺點:

1 使用者點了「繼續」,頁面瞬間一大片紅字跳出來。

更好的做法:

只提示使用者剛剛互動過的那個欄位,或者只提示第一個出錯的欄位,其餘先不管。

或者 配合輕微動畫(如按鈕晃動、欄位邊框閃一下)告訴使用者“這兒需要你注意”。

2 使用者只是在輸入「姓氏」時按了“繼續”,結果所有欄位,包括還沒點過的「出生日期」也全都報錯。

更好的做法:

把“錯誤提示”延遲到使用者真正填寫並離開欄位後再出現。

剛進入頁面時,表單可以不提示只在使用者真的操作過後再反饋。

Amazon做的有優點也有缺點

優點:

點“Continue”按鈕不會一開始就禁用。使用者不會一來就被“限制行為

開啟頁面後,遊標自動聚焦到第一個欄位,可以馬上開始輸入。

只要使用者在某個欄位輸入了內容並離開,錯誤提示就消失了。

當使用者填好當前欄位,按“Continue”後,系統自動幫使用者跳轉到下一個需要改的地方。

缺點:

1 所有欄位同時標紅,沒有優先順序。

更好的做法:

只標紅第一個有問題的欄位,其他的保持中性。

顯示一個友好提示,比如:“請先填寫你的名字”

按“繼續”後,自動聚焦到那個欄位,引導使用者直接開始改。

後續點選“繼續”後,依次校驗下一個欄位。

2 確認密碼欄位不提示錯誤,卻是必填項

更好的做法:

一開始就在欄位下方輕描淡寫地提示:“請重複輸入密碼以確認”

如果使用者跳過不填,按鈕點選後欄位才出現紅色提示

當使用者填完密碼欄位後,確認密碼欄位才變為“必填狀態”

3 從使用者角度看,“系統到底憑什麼這麼提示我?” 系統行為像“黑箱”。

更好的做法:

出現錯誤時,不要只顯示“錯誤”,而是說清楚“哪裡錯了”(例:“請輸入至少6個字元”)

使用者改錯後,立刻取消提示,並展示“已透過 ✓”

IBM 看上去整潔,但比Yahoo還差

優點:

1 按鈕預設是可點的

2 自動滾動到出錯欄位,但當使用者提交出錯後,頁面會自動滾動到第一個出錯欄位的位置。

缺點:

1 出現錯誤後,即使使用者刪除內容、清空欄位,表單也無法“回到乾淨的初始狀態”。嚴重違反了“可逆性(reversibility)”原則。

更好的做法:

使用者改完就清除紅框,恢復“初始狀態感”,讓人感覺“自己修對了”。

減少顏色強度或換成非“懲罰性”表達方式,例如:用「淡紅框 + 小字說明」,代替「濃烈紅框 +大段錯誤字串」。

首次進入頁面時就明確告訴使用者哪些是必填欄位。

2 不立即告訴使用者哪錯了,而是等使用者全部完成錯誤提示一起出現了

更好的做法:

錯誤提示逐步出現,不要一次性炸出來,比如先提示 email 再提示名字。

Google 表單錯誤

缺點:

1. 驗證時機過早,打斷使用者輸入流程。使用者還在輸入年份時就被提示錯誤,極其打擊使用者信心,形成所謂的“輸入焦慮”。

更好的方案:不要在使用者還沒輸完的時候就提示錯誤,應等使用者“離開欄位”後再判斷

2 提示方式粗暴且分散。就像早期 DOS 命令列系統那樣,直接把錯誤“扔”到螢幕上,只不過換成了 GUI、加了點紅色。

更好的方案:提前告訴使用者格式,比如:MM/YYYY格式說明放在輸入框下方,明確格式:例如:2022

正確的設計思路:

1 別把“使用者輸錯”和“系統沒找到”混為一談。

Process error(過程錯誤):做某件事失敗了

Data error(資料錯誤):你填的內容就不對

錯誤型別舉例正確反饋方式
資料錯誤(data error)郵箱缺了“@”用紅色 + 明確說明 “請輸入有效郵箱地址”
過程錯誤(process error)郵件提交後返回失敗用灰色、彈窗或頂部提示 “伺服器響應失敗,請稍後重試”
資料錯誤ZIP code 少了數字紅框 + 下方提示 “請輸入5位郵編”
過程錯誤ZIP code格式正確但查不到結果溫和提示 “我們暫未支援該區域”

2 Empty field 空欄位 ≠ 錯誤

使用者沒填內容,不代表他錯了。只是還沒填而已。不要一上來就把空欄位標成紅色,給使用者一種“你已經做錯了”的感覺。

3 State change 狀態變化 ≠ 資料錯誤

電水壺燒開後會自動“跳閘”,但跳閘是由溫度感測器控制的,不是水本身控制的。不要懲罰使用者的空白和系統自己的錯誤。UI 的錯誤提示應該準確反映“錯的是誰”。

比如使用者輸入了郵編,點“搜尋”系統後臺沒找到匹配的城市,UI 卻把輸入框標紅,提示“格式錯誤”或“無效郵編”這會讓使用者產生錯誤歸因,以為自己輸錯了,其實是系統後臺的問題。應該是

型別處理方式
使用者真的輸錯(data error)用紅色、明確提示(如缺少“@”)
系統查不到(process error)用灰色/輕提示,例如“我們暫時找不到相關城市,可稍後再試”
輸入還未開始使用 placeholder 提示格式

發散方案:一次只讓使用者做一件事(One action at a time)

傳統表單設計的問題:

“每次只讓使用者面對一個欄位” + “系統用溫和方式提醒錯誤”

一個新表單原型測試表明每屏只放一個輸入框,測試給17個使用者用,比原表單快了13%!證明瞭使用者“每次只看一個輸入框”效率更高、出錯更少。demo:interactive prototype

藍色深淺對應模組
深藍色填姓名/郵箱/電話(ФИО...)
中藍色同意條款(Соглашения)
淺藍色輸入驗證碼(SMS)
指標表現
單欄位分屏互動是否更快?是,大部分使用者在 30~70 秒內完成
哪些步驟容易拖慢節奏?驗證碼(SMS) 和 填基本資訊
一次一個輸入項是否影響效率?沒有變慢,反而提高了專注和成功率
設計原則做法好處
一次一個輸入項每屏只放一個欄位減少認知負擔,避免混亂和錯誤
無輸入 = 不推進不跳轉下一步,但不爆紅使用者自然意識到需要填寫
錯誤提示溫和引導“欄位未填”→ 自動跳焦點 + 灰色提醒無需懲罰式紅字也能糾正行為
特殊場景相容多欄位介面也可用“優先焦點+灰色提示”策略保持體驗一致性

發散思考:用狀態管理器(State Manager)統一管理表單行為

功能使用者體驗提升點
檢查所有欄位的狀態找出第一個出錯的欄位,而不是一股腦報錯
自動帶使用者回到那個欄位避免“你錯了但不知道錯在哪”
在“Continue”按鈕上動態顯示欄位名形成按鈕與欄位的視覺+語義連線
滑鼠懸停或鍵盤“Next”時給出溫和提示替代紅色“嚴厲警告”

左圖:

右圖:

傳統表單設計的問題,不是出錯,而是“錯誤反饋方式太糟糕”。狀態管理器的價值在於: